import logging
import unittest

from parameterized import parameterized

import utils
from api.enpApi import EmpApi
from api.loginApi import loginApi


class TestEmp(unittest.TestCase):
    def setUp(self) -> None:
        #实例化登录模块
        self.login_api = loginApi()
        #实例化员工管理
        self.emp_api = EmpApi()

    #员工管理(增删改查)
    @parameterized.expand(utils.read_json("emp_case_data"))
    def test01_emp_mang(self,login_json_dict,add_emp_json_dict,update_emp_json_dict,exp_status_code,exp_success,exp_code,exp_message):
        # 1.测试数据的初始化  (删除员工)
        sql_str ="delete from bs_user WHERE mobile='18934222222'"
        sql_res = utils.DBUtil.exe_sql(sql_str)
        print(sql_res)
        logging.info("初始化sql语句:{}".format(sql_str))

        # 2.获取token信息
        # login_json_dict={"mobile":"13800000001","password":"123456"}
        token =self.login_api.get_token(login_json_dict)
        print(token)
        logging.info("获取的token:{}".format(token))

        # 3.完成员工添加
        # add_emp_json_dict ={"username":"张三","mobile":"18934222222","workNumber":"9527"}
        res_add_emp = self.emp_api.add_emp(token,add_emp_json_dict)
        #获取字典类型的响应数据
        res_add_emp_dict = res_add_emp.json()
        print(res_add_emp_dict)
        #提取新增员工id
        add_emp_id =res_add_emp_dict.get("data").get("id")
        print(add_emp_id)
        #断言
        # #断言状态码
        # self.assertEqual(200,res_add_emp.status_code)
        # #断言响应数据
        # self.assertEqual(True,res_add_emp_dict.get("success"))
        # self.assertEqual(10000,res_add_emp_dict.get("code"))
        # self.assertIn("成功",res_add_emp_dict.get("message"))
        # 公共断言方法 调用utils.py   response响应体
        utils.common_assert(self, res_add_emp, exp_status_code, exp_success, exp_code, exp_message)


        # 4.完成员工添加的查询
        res_query_emp = self.emp_api.query_emp(token,add_emp_id)
        #获取字典类型的响应体数据
        res_query_emp_dict = res_query_emp.json()
        print(res_query_emp_dict)
        #断言
        #断言状态码
        # self.assertEqual(200,res_add_emp.status_code)
        # #断言响应数据
        # self.assertEqual(True,res_query_emp_dict.get("success"))
        # self.assertEqual(10000,res_query_emp_dict.get("code"))
        # self.assertIn("成功",res_query_emp_dict.get("message"))
        # 公共断言方法 调用utils.py
        utils.common_assert(self,res_add_emp,exp_status_code,exp_success,exp_code,exp_message)
        #断言员工信息是否正确
        self.assertEqual("张三",res_query_emp_dict.get("data").get("username"))
        # add_emp_json_dict.get("mobile") 添加员工的手机号(可能会变更,动态去添加接口传入的添加员工的请求体数据中进行获取
        self.assertEqual(add_emp_json_dict.get("mobile"),res_query_emp_dict.get("data").get("mobile"))
        self.assertEqual("9527",res_query_emp_dict.get("data").get("workNumber"))

        # 5.完成员工的修改
        # update_emp_json_dict = {"username":"赵四"}
        res_update_emp = self.emp_api.update_emp(token,update_emp_json_dict,add_emp_id)
        #获取字典类型的响应体数据
        res_update_emp_dict = res_update_emp.json()
        print(res_update_emp_dict)
        # 断言
        # # 断言状态码
        # self.assertEqual(200, res_update_emp.status_code)
        # # 断言响应数据
        # self.assertEqual(True, res_update_emp_dict.get("success"))
        # self.assertEqual(10000,res_update_emp_dict.get("code"))
        # self.assertIn("成功",res_update_emp_dict.get("message"))
        # 公共断言的方法 调用utils.py
        utils.common_assert(self,res_update_emp,exp_status_code,exp_success, exp_code,exp_message)

        # 6.完成添加员工的删除
        res_del_emp = self.emp_api.del_emp(token,add_emp_id)
        #获取字典类型的响应体数据
        res_del_emp_dict = res_del_emp.json()
        print(res_del_emp_dict)
        # 断言
        # # 断言状态码
        # self.assertEqual(200, res_del_emp.status_code)
        # # 断言响应数据
        # self.assertEqual(True, res_del_emp_dict.get("success"))
        # self.assertEqual(10000, res_del_emp_dict.get("code"))
        # self.assertIn("成功", res_del_emp_dict.get("message"))
        # 公共断言的方法 调用utils.py
        utils.common_assert(self, res_del_emp,exp_status_code,exp_success,exp_code, exp_message)
